Today, business is often conducted via portable and hand-held computers. Devices such as smart phones, personal digital assistants, tablet based computers and netbooks, to name just a few, have a small physical footprint yet a rich graphical user interface. As such, they are well suited for data presentation and remote business use. While the computing power of such devices is considerable, it nonetheless pales in comparison to the computing power of a server or server farm. The same can be said of desktop and laptop computers. While such computers provide rich graphical user interfaces and posses considerable computing power in their own right, absolute computing power pales in comparison to the computing power of a server or server farm. As a result, many computationally intensive applications are most effectively run on servers or server farms. Still, it is often convenient to remotely access the data that is output by such computationally intensive applications on small footprint, hand-held devices or on simple desktop or laptop computers. For example, a salesperson can benefit from having instant access to all of the sales records of his or her customers, including detailed records of orders placed, shipments made, invoices sent, and payments received over a period of several years. Depending on the number and size of the customers, such records can be voluminous, and maintaining and analyzing them can be a computationally intensive task that is best left to an enterprise server or server farm. Nonetheless, the salesperson may benefit from having instant access to and the ability to mine the sales information to address issues that may arise during a sales call or while working on his or her desktop preparing to make a sales call. Moreover, the enterprise can benefit by allowing the salesperson to have write access to the sales records from any remote computer, thereby allowing the sales person to enter new or useful sales information such as the name and contact information of a customer's new purchasing agent.
Achieving both of these goals, i.e., running data intensive applications on server farms where they are most efficiently run while providing access to the output of these applications on remote devices like laptops, desktops or smart phones where they may most urgently be needed, can be accomplished using a client-server computing paradigm. In this paradigm, a client application running on a remote device can interface with and control a server application running on an enterprise server or server farm. The client based application can send commands and data to the server, while the server can execute the commands and return requested or updated data to the client. The information exchanged between the client and server systems in such a client-server computing architecture can often strain the communications link that exists between the systems, especially when large amounts of data are transferred. Thus, techniques for reducing the amount of data that is transferred between the client and server without reducing the utility of the entire client-server architecture are provided.